Speak!

SAP kann sprechen. Mit der Microsoft Speech API 5.3

https://pixabay.com/de/sound-welle-stimme-h%C3%B6ren-856770/
https://pixabay.com/de/sound-welle-stimme-h%C3%B6ren-856770/

Auf der Seite http://abapdn.blogspot.com bin ich auf folgenden interessanten Code gestoßen:

INCLUDE ole2incl.
DATA : v_objole      TYPE ole2_object,
       v_objolevoice TYPE ole2_object,
       v_strtotalk   TYPE string.

CREATE OBJECT v_objolevoice 'SAPI.SpVoice'.

SET PROPERTY OF v_objolevoice 'Volume' = 80.
SET PROPERTY OF v_objolevoice 'Rate' = -1.

v_strtotalk = 'This is great'.

CALL METHOD OF v_objolevoice 'Speak' = v_objole
EXPORTING #1 = v_strtotalk.

FREE: v_objolevoice,v_objole.

Und SAP kann sprechen… Leider ist es mir nicht gelungen, andere Stimmen zu aktivieren. Es spricht standardmäßig “Anna” (“Mary” laut Doku). Es müsste aber auch noch “Mike” vorhanden sein.

Get Voice

Mit diesem Code-Schnipsel kann man die eingestellte Stimme ermitteln.

DATA v_voicename TYPE string.
DATA v_voice     TYPE ole2_object.
GET PROPERTY OF v_objolevoice 'Voice' = v_voice.
CALL METHOD OF v_voice 'GetDescription' = v_voicename.

Umgestellt werden kann die Stimme leider nicht, denn dafür müsste man per OLE ein indiziertes Array ansprechen, was aber nicht geht. Aufgrund von Lizenzproblemen ist häufig aber auch nur eine Sprache (und Stimme) installiert.

Asynchrone Sprachausgabe

In der Defaulteinstellung wird die Verarbeitung erst fort gesetzt, wenn die Sprachausgabe beendet ist. Mit dem Parameter SVSFlagAsync der Methode SPEAK kann die Sprachausgabe jedoch auch asynchron erfolgen. Das ist beispielsweise dann sinnvoll, wenn eine per MESSAGE ausgegebene Meldung auch gesprochen werden soll. Die Meldung sollte dann natürlich nicht erst erscheinen, wenn sie bereits vorab einmal komplett gesprochen wurde…

CALL METHOD OF v_objolevoice 'Speak' = v_objolevoice
EXPORTING #1 = v_strtotalk
#2 = 1.  "SVSFlagsAsync

Links

Hier der Link zum Artikel:
http://abapdn.blogspot.com/2010/09/sap-knows-how-to-speak.html

Und hier der Link zur API-Dokumentation:
http://msdn.microsoft.com/en-us/library/ms723614(v=vs.85).aspx

Kürzer!

Hier noch eine kürzere Variante von Nalon:

DATA ovoice TYPE ole2_object.
CREATE OBJECT ovoice 'SAPI.SpVoice'.
IF sy-subrc = 0.
  CALL METHOD OF ovoice 'Speak'
    EXPORTING #1 = 'Ich will sprechen'.
ENDIF.
Enno Wulff